vim para limpar tags HTML
VIM para limpar tags HTML
Você tem um arquivo muito grande, e quer extrair algum valor em específico. Você pode usar substituição com expressão regular.
Certo, não é apenas com VIM. Você poderia usar o grep também. Estou usando VIM pela facilidade no post.
Sim, você poderia usar um crawler para isso. No meu caso, eu só queria extrair esses valores de um único arquivo.
TL;DR
:%g!/useful-class/d
:%s/<a.*href="\([^"]*\).*\n/\1\r/g
Arquivo de teste
Para testar, você pode abrir o seguinte arquivo no VIM:
SOME BIG HTML
<a class="useful-class" href="http://example/1">Example 1</a>
NOT USEFUL LINE
<a class="useful-class" href="http://example/2">Example 2</a>
END OF BIG HTML
Em nosso exemplo, queremos remover as linhas inúteis e deixar apenas a URL.
Comandos
Limpar as linhas inúteis:
:%g!/useful-class/d
- %g! Fazer algo em todas as linhas que não contenham certa expressão
- useful-class A expressão que estamos procurando. No caso, queremos encontrar useful-class
- d Definimos que queremos deletar quando não encontrar a expressão
Remover conteúdo inútil:
:%s/<a.*href="\([^"]*\).*\n/\1\r/g
- %s Substituir todas as linhas que possuam certa expressão
- Expressão (esse é longo):
- <a Que começa com
<a
- .* Com qualquer caracter até…
- href=” …até que encontre
href="
- \([^”]*\) e a primeira parte (chamada de “atom”) é qualquer coisa que não contenha aspas(
[^"]*
sem aspas). O “atom” é o conteúdo entre os parênteses((...)
) - .* e qualquer caracter até…
- \n …até que encontre uma nova linha
\n
- <a Que começa com
- \1\r e substituir pelo primeiro “atom” e uma nova linha
- g rodar o comando
Done
O resultado é esse:
http://example/1
http://example/2
Não é simples, mas da segunda vez é mais fácil de lembrar.
Eu usei hoje para limpar um simples arquivo longo (copiei o DOM <ul><li><a>...</a></li></ul>
) e rodei os comandos (ao mesmo tempo que ia aprendendo também).